중소조선연구원 BLE 메시지 연동

□ 중소조선연구원은 ‘조선소 안전관리 시스템 센서 데이터 전송 규격서’를 전달하고 해당 규격에 따라 추락 보호복의 센서 데이터를 전송해달고  요청함(9.8)

o 프로토콜 : HTTP POST

o URL : http://43.202.209.69/api/sensor/data

o Content-Type : text/plain

o 데이터 형식 : $H,xx,O,III.IIIIII,yyy.yyyyyy,hhmmss,hh

필드	설명	형식	예시
$	시작 문자	고정	$
H	센서 타입 식별자	고정	H
xx	센서 ID	2자리 숫자	01
O	스마트 조끼 동작 유뮤	0 : 미동작, 1 : 동작	1
III.IIIIII	경도(Longitude)	소수점 6자리	128.716543
yyy.yyyyyy	위도(Latitude)	소수점 6자리	35.107896
hhmmss	시간	HHMMSS	153045
hh	체크섬	2자리 숫자	11 고정

□ 규격서에 “모든 센서 데이터는 LTE 통신을 통해 HTTP POST 방식으로 전송되며”라는 언급이 있어 신환철 대표님께 확인(9.10)한 결과,

o 반드시 센서 모듈에서 센서 데이터를 LTE로 전송해야 하는 것은 아니며, 서버에서 데이터를 전송해도 무방하다고 해서,

o 임대 서버(safewaredata..co.kr)에서 BLE 메시지를 규격서 데이터 형식으로 변환해서 전송하는 것으로 결정함

□ 세이프웨어 MQTT 처리 프로그램(MQTT-Client)과 독립적으로 실행되도록 별도의 콘솔 프로그램으로 BLE 메시지 중계기능을 구현함(9.29∼30)

o 프로그램 일반사항

- 명칭 : sw_mqtrld.exe

- 플랫폼 : 64비트

- 개발 언어 : C/C++

* 향후 해당 프로그램을 리눅스 등 서버에서 사용할 것에 대비

- 사용 라이브러리 : mysql-connector-c++-9.3.0-winx64, Eclipse Mosquitto(MQTT), cpp-httplib

o 프로그램 동작방식

- ‘safewaredata.co.kr’의 MQTT 서버에 접속해서 모든 MQTT 메시지를 수신한 다음, 기기 ID를 기준으로 DB 테이블(sw_mqtt_relay)을 참조해서 메시지의 중계 여부를 결정함

- 중계 대상 메시지를 규격서 데이터 형식으로 변환한 다음, 이를 DB 테이블의 ‘target’ 필드를 전송 URL로 지정해서 HTTP POST 방식으로 전송함

- 전송 성공 여부를 DB 테이블(sw_logs)에 기록함

o DB 테이블(sw_mqtt_relay)

구분	유형	조건	비고
id	VARCHAR(32)	기본키	디바이스 ID
mode	INT	NOT NULL	1 : 중소조선연구원
opt	INT	NULL
name	VARCHAR(32)	NULL	센서 ID(2자리 숫자)
target	VARCHAR(256)	NOT NULL
dt	DATETIME	NULL	CURRENT_TIMESTAMP

o DB 테이블(sw_logs)

구분	유형	조건	비고
num	INT	기본키	AUTO_INCREMENT
source	VARCHAR(16)	NULL	“relay”
id	VARCHAR(32)	“	디바이스 ID
opt	VARCHAR(16)	“
message	VARCHAR(200)	“	규격서 형식 메시지
status	VARCHAR(16)	“	성공 여부(HTTP Status)
dt	DATETIME	“	CURRENT_TIMESTAMP

□ DB 테이블(sw_mqtt_relay)에 테스트 필드를 등록하고 개발 프로그램(sw_mqrld)을 실행한 후 MQTT-Client에서 테스트 메시지를 발생시켜 메시지 중계 정상 작동 여부를 확인함(9.30)

o 상황별 화면 출력

- 메시지 정상 전달

# 2025.09.30 18:15:54  Q=0;2;1;ABC234;0,76,0,0,0,408;1;37.4115068,127.0951726  (C3)

-> http://localhost:3000/api/tutorials/post,

$H,11,0,127.095172,37.411506,181555,11 >> OK

- HTTP 서버 접속 불가

# 2025.09.30 18:15:20  Q=0;2;1;ABC234;0,76,0,0,0,408;1;37.4115068,127.0951726  (C3)

-> http://localhost:3000/api/tutorials/post,

$H,11,0,127.095172,37.411506,181521,11 >> Not Connected

- 메시지 전달 실패

# 2025.09.30 18:20:41  Q=0;2;1;ABC123;0,76,0,0,0,408;1;37.4115068,127.0951726  (C3)

-> http://43.202.209.69/,

$H,10,0,127.095172,37.411506,182041,11 >> ERROR(405)

* ERROR(405) : 405 → HTTP Response Status Code

o MQTT-Client에서 테스트 메시지를 발생시켜 메시지를 중계하게 한 다음, 중소조선연구원 웹페이지(http://43.202.209.69)에 접속해서 테스트 메시지를 정상적으로 수신했음을 확인함

□ 참고사항

o DB 테이블(sw_mqtt_relay)은 ‘id’를 기본키로 사용해서 기기 ID별로 하나의 정보만을 등록할 수 있으며,

- 이에 따라, MQTT 메시지를 하나의 서버로만 전달할 수 있고, 여러 개의 서버로는 전달할 수 없음(다중 중계 未지원)

- 향후, 다중 중계가 필요해질 경우, 가상 ID를 사용하는 방식으로 다중 중계를 지원하도록 구현할 예정임. 끝.